// 定义接口 强约束
interface Istate {
    name: string;
}

var obj1: Istate;
// obj1 = {} // 报错, 因为缺少name属性
obj1 = { name: '张三' } // 正确



// 定义可选属性:添加?
interface Istate2 {
    name: string;
    age?: number; // 该属性可有可无
}
var obj2: Istate2;
obj2 = { name: '张三' } // 正确


// 属性个数不确定时--如果动态添加属性(必须是任意类型)
interface Istate3 {
    name: string; // 也可以在接口中定义联合类型
    [propName: string]: any;
}

var obj3: Istate3;
obj3 = { name: '李四', age: 20, sex: '男' }


// 只读属性
interface Istate4 {
    name: string,
    readonly age: number,
}

var obj4: Istate4 = { name: '王五', age: 40 };
obj4.name = '赵六' // 正确
// obj4.age = 50 // 错误,因为age只读,不可修改

